update2019-08-22 11:40:33

1 はじめに

magickパッケージではImageMagick STLという 最も包括的なオープンソースの画像処理のラッパーであり, Rに高品質の画像処理を提供する.

ひとまず以下のインストール~OCRはここを読みながら作成したもの. 何かを追加する場合にはこの下へ追加していく.

2 Install

CRANから行えるので省略.

## List of 21
##  $ version           :Class 'numeric_version'  hidden list of 1
##  $ modules           : logi FALSE
##  $ cairo             : logi TRUE
##  $ fontconfig        : logi FALSE
##  $ freetype          : logi TRUE
##  $ fftw              : logi TRUE
##  $ ghostscript       : logi TRUE
##  $ jpeg              : logi TRUE
##  $ lcms              : logi TRUE
##  $ libopenjp2        : logi FALSE
##  $ lzma              : logi TRUE
##  $ pangocairo        : logi TRUE
##  $ pango             : logi TRUE
##  $ png               : logi TRUE
##  $ rsvg              : logi TRUE
##  $ tiff              : logi TRUE
##  $ webp              : logi TRUE
##  $ wmf               : logi FALSE
##  $ x11               : logi FALSE
##  $ xml               : logi TRUE
##  $ zero-configuration: logi TRUE

LinuxではImageMagick++のインストールが必要になる. 詳しくはここを見て欲しい.

3 Image IO

3.1 Read and Wrie

バイナリやテキストに関わらず様々なフォーマットから 直接読み込みを行うことが可能である.

## # A tibble: 1 x 7
##   format width height colorspace matte filesize density
##   <chr>  <int>  <int> <chr>      <lgl>    <int> <chr>  
## 1 PNG      400    400 sRGB       TRUE         0 72x72

拡張子を変更して書き出すことも余裕. ベクターデータだったものも,ラスターファイルで 作成することが可能.

画像のプレビューには Linuxように次の関数も用意されている.

4 Transformations

transformationを学ぶのに最も有効な方法は RStudioで ?transformationsで開かれるヘルプページを 一通りなめることである.

下記の例では,何が出来そうかについて掴んで欲しい.

4.1 Cut and edit

いつくかのtransformation関数では, geometryを引数に取る. これはAxB+C+Dという形で表現されており, 次のような意味がある.

  • A:ワイド方向のピクセル数
  • B:高さ方向のピクセル数
  • C:x方向にずらすピクセル数
  • D:y方向にずらすピクセル

詳しい構文の方法についてはここを読み込んで欲しい

## # A tibble: 1 x 7
##   format width height colorspace matte filesize density
##   <chr>  <int>  <int> <chr>      <lgl>    <int> <chr>  
## 1 PNG      220    445 sRGB       TRUE     73494 72x72

image_fillではスタートポイントと, ファジーレベルを決めてスタートポイントと 同じ色を塗りつぶしていく

4.2 Filters and effects

ImageMagcikでは標準的な効果がたくさん実装されている.

4.3 Kernel convolution

画像にカーネルを適用するには image_convolve関数を用いる.

これはカーネルたたみ込みを行うと, あるピクセルに対して隣接ピクセルとの重み付け和が 計算される.

##      [,1] [,2] [,3]
## [1,] 0.00 0.25 0.00
## [2,] 0.25 0.00 0.25
## [3,] 0.00 0.25 0.00

標準カーネルについては実装されている. ここを確認して欲しい.

4.5 Combining with pipes

すべてのtransformationについては, コピーを返しており, オリジナルファイルへ与える副作用はない.

つまり,変形を組み合わせるには つなげる必要がある.

## # A tibble: 1 x 7
##   format width height colorspace matte filesize density
##   <chr>  <int>  <int> <chr>      <lgl>    <int> <chr>  
## 1 PNG      465    240 sRGB       TRUE         0 72x72

5 Image Vectors

これまでに示した例は, 1枚の画像を対象をしたものであった. しかし,magickのすべての関数はベクトルかされており, 複数のレイヤーや合成,アニメーションに対しても動作する.

[, [[, c(), そして, lengthといった 標準のbase関数については,レイヤー群に対しても 使うことが可能である.

## [1] 44

5.1 Layers

フォトショップでやるような,画像のスタッキングが行える.

モザイク化すると,すべて画像が収まる大きさに調整される.

flattenを使うと最初の画像の大きさで,モザイクしてくれる.

モザイクとフラットは,合成の方法をしているすることができる. 合成の方法はここを参照して欲しい.

5.2 Combining

合成により特定の位置で二つの画像を組み合わせることが可能となる.

## # A tibble: 1 x 7
##   format width height colorspace matte filesize density
##   <chr>  <int>  <int> <chr>      <lgl>    <int> <chr>  
## 1 PNG      240    200 sRGB       TRUE         0 72x72

5.3 Pages

PDFドキュメントを読み込んだ際には, ページごとにベクターデータになる. PDFは特定の解像度が求められた際にはすぐさま レンダリングされていることに注意する.

5.4 Animation

ベクターをレイヤーの要素として取り扱うことに変わり, フレームとして扱いアニメーションを作成することも可能である.

Morphingは連続的にn個の画像を魅せる代わりに, ひとつの画像を他の画像へmorphする. これは アニメーションになる.

GIFやビデオフォーマットのファイルを読み込んだ際には, それぞれのフレームがレイヤーとして読み込む.

それぞれのフレームに背景を追加したアニメーションを作成する.

## # A tibble: 8 x 7
##   format width height colorspace matte filesize density
##   <chr>  <int>  <int> <chr>      <lgl>    <int> <chr>  
## 1 gif      200    155 sRGB       TRUE         0 72x72  
## 2 gif      200    155 sRGB       TRUE         0 72x72  
## 3 gif      200    155 sRGB       TRUE         0 72x72  
## 4 gif      200    155 sRGB       TRUE         0 72x72  
## 5 gif      200    155 sRGB       TRUE         0 72x72  
## 6 gif      200    155 sRGB       TRUE         0 72x72  
## 7 gif      200    155 sRGB       TRUE         0 72x72  
## 8 gif      200    155 sRGB       TRUE         0 72x72

image_backgroundのflattenは 背景となるものを敷くイメージ. flattenがFALSEだと背景が埋まっていないので, 合成する次のように積集合のような絵ができる.

## # A tibble: 8 x 7
##   format width height colorspace matte filesize density
##   <chr>  <int>  <int> <chr>      <lgl>    <int> <chr>  
## 1 gif      200    155 sRGB       TRUE         0 72x72  
## 2 gif      200    155 sRGB       TRUE         0 72x72  
## 3 gif      200    155 sRGB       TRUE         0 72x72  
## 4 gif      200    155 sRGB       TRUE         0 72x72  
## 5 gif      200    155 sRGB       TRUE         0 72x72  
## 6 gif      200    155 sRGB       TRUE         0 72x72  
## 7 gif      200    155 sRGB       TRUE         0 72x72  
## 8 gif      200    155 sRGB       TRUE         0 72x72

アニメーションは次で出力する.

6 Drawing and Graphics

6.1 Graphics device

グラフィックオブジェクトを作成するimage_graphpngのような 関数と同様の機能を有する.

## png 
##   2

グラフィックオブジェクトが作成されていることで, 通常の画像操作を扱うことができる.

## # A tibble: 1 x 7
##   format width height colorspace matte filesize density
##   <chr>  <int>  <int> <chr>      <lgl>    <int> <chr>  
## 1 PNG      400    400 sRGB       TRUE         0 72x72

6.2 Drawing device

グラフィックの他の使い方としてぇあ, ピクセル座標値を使い画像に絵を描いていく方法がある.

## Warning in text.default(30, 250, "Hoiven-Glaven", fmamily = "monospace", :
## "fmamily" はグラフィックスパラメータではありません
## png 
##   2
## # A tibble: 1 x 7
##   format width height colorspace matte filesize density
##   <chr>  <int>  <int> <chr>      <lgl>    <int> <chr>  
## 1 PNG      220    445 sRGB       TRUE         0 72x72

グラフを描画しているimage_drawでは すべてのマージンをゼロにしており,左上が0,0の座標である. マージンをどの程度にするのかは引数で設定が可能である.

6.3 Animated Graphics

graphicsデバイスを使うことでマルチフレーム機能を サポートしており,アニメの作成が容易となる.

## png 
##   2
## # A tibble: 12 x 7
##    format width height colorspace matte filesize density
##    <chr>  <int>  <int> <chr>      <lgl>    <int> <chr>  
##  1 gif      600    340 sRGB       TRUE         0 72x72  
##  2 gif      600    340 sRGB       TRUE         0 72x72  
##  3 gif      600    340 sRGB       TRUE         0 72x72  
##  4 gif      600    340 sRGB       TRUE         0 72x72  
##  5 gif      600    340 sRGB       TRUE         0 72x72  
##  6 gif      600    340 sRGB       TRUE         0 72x72  
##  7 gif      600    340 sRGB       TRUE         0 72x72  
##  8 gif      600    340 sRGB       TRUE         0 72x72  
##  9 gif      600    340 sRGB       TRUE         0 72x72  
## 10 gif      600    340 sRGB       TRUE         0 72x72  
## 11 gif      600    340 sRGB       TRUE         0 72x72  
## 12 gif      600    340 sRGB       TRUE         0 72x72

7 Raster Images

Magickの画像はRのベースグラフィックで使うための ラスターオブジェクトに変換することができる. そのため.Magickの画像は他のグラフィックツールとも連携できる. しかし,Rのラスターオブジェクトは遅く,座標系が違ううえ, 品質が下がる.

7.2 The grid package

パッケージgridを使うことでグラフィックデバイスに ラスターオブジェクトを重ねることは行いやすい.

## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

8 OCR text extraction

## # A tibble: 1 x 7
##   format width height colorspace matte filesize density
##   <chr>  <int>  <int> <chr>      <lgl>    <int> <chr>  
## 1 PNG      640    480 sRGB       TRUE     23359 72x72

## This is a lot of 12 point text to test the
## ocr code and see if it works on all types
## of file format.
## 
## The quick brown dog jumped over the
## lazy fox. The quick brown dog jumped
## over the lazy fox. The quick brown dog
## jumped over the lazy fox. The quick
## brown dog jumped over the lazy fox.